package org.JQbitorrentClinet.interfaces;

import org.JQbitorrentClinet.pojo.torrent.*;
import org.JQbitorrentClinet.request.torrentmanagement.*;

import java.util.List;
import java.util.Map;

public interface TorrentManageProxy {
    List<TorrentInfo> getTorrentList();

    TorrentGenericProperties getTorrentProperties(String hash);

    List<TrackerInfo> getTorrentTrackers(String hash);

    List<TorrentWebSeed> getTorrentWebSeeds(String hash);

    List<TorrentContent> getTorrentContents(String hash, String[] indexes);

    List<Integer> getTorrentPiecesStates(String hash);

    List<String> getTorrentPiecesHashes(String hash);

    boolean pauseTorrent(List<String> hashes);

    boolean resumeTorrent(List<String> hashes);

    boolean deleteTorrent(List<String> hashes, boolean deleteFiles);

    boolean recheckTorrent(List<String> hashes);

    boolean reannounceTorrent(List<String> hashes);

    boolean addNewTorrent(AddNewTorrentParam param);

    boolean addTrackersToTorrent(String hash, List<String> trackers);

    boolean editTrackersInTorrent(EditTrackersParams params);

    boolean removeTrackersFromTorrent(String hash, List<String> trackers);

    boolean addPeersToTorrent(List<String> hashes, List<String> peers);

    boolean increaseTorrentPriority(List<String> hashes);

    boolean decreaseTorrentPriority(List<String> hashes);

    boolean maxTorrentPriority(List<String> hashes);

    boolean minTorrentPriority(List<String> hashes);

    boolean setTorrentFilePriority(SetFilePriorityParam param);

    Map<String, Long> getTorrentDownloadLimit(List<String> hashes);

    boolean setTorrentDownloadLimit(List<String> hashes, Long limit);

    boolean setTorrentShareLimit(List<String> hashes, Float ratioLimit, Long seedingTimeLimit);

    Map<String, Long> getTorrentUploadLimit(List<String> hashes);

    boolean setTorrentUploadLimit(List<String> hashes, Long limit);

    boolean setTorrentLocation(List<String> hashes, String location);

    boolean setTorrentName(String hash, String name);

    boolean setTorrentCategory(List<String> hashes, String category);

    Map<String, Category> getAllCategories();

    boolean addCategory(Category category);

    boolean editCategory(Category category);

    boolean removeCategories(List<String> categories);

    boolean addTagsToTorrent(List<String> hashes, List<String> tags);

    boolean removeTagsFromTorrent(List<String> hashes, List<String> tags);

    List<String> getTags();

    boolean createTags(List<String> tags);

    boolean deleteTags(List<String> tags);

    boolean setAutoManagement(List<String> hashes, boolean enable);

    boolean ToggleSequentialDownload(List<String> hashes);

    boolean setFirstLastPiecePriority(List<String> hashes);

    boolean setForceStart(List<String> hashes,boolean enable);

    boolean setSuperSeeding(List<String> hashes, boolean enable);

    boolean renameFiles(String hash,String oldPath,String newPath);

    boolean renameFolder(String hash, String oldFolder, String newFolder);

    TorrentInfo getTorrentInfo(String hash);
}
